package com.atguigu.demojuc.chap09;

/*class DataOne{

    // volatile 不能解决原子性问题
    private  Integer number = 0;

    public synchronized Integer incr(){
        return ++number;    // java中  ++ 和 -- 操作不是原子性的
    }
}*/

import java.util.concurrent.atomic.AtomicInteger;

// 不用 synchronized 给方法加锁 来解决并发访问安全问题！
//  其他解决方案：
//      使用CAS   乐观锁    比较并交换     修改数据时，不用加锁，而是通过  期望值和原值进行比较，如果一致则修改成新值。如果不一致，就重新执行CAS
class DataOne{


    private AtomicInteger number = new AtomicInteger(0);

    public Integer incr(){
        return number.incrementAndGet(); //  底层使用CAS进行  ++ i 操作
    }
}

public class VolatileAtomicDemo {

    public static void main(String[] args) {

        DataOne dataOne = new DataOne();

        for (int i = 0; i < 1000; i++) {
            new Thread(() -> {
                System.out.println(dataOne.incr());
            }).start();
        }
    }
}